“A Relational Model of Data for Large Shared Data Banks” (Um modelo relacional de dados para grandes bancos de dados compartilhados)
Base matemática do modelo:
Agora entramos na base formal que sustenta os SGBDs.
Os conceitos a seguir estão no Capítulo 5 do livro “Fundamentos matemáticos para a ciência da computação Matemática Discreta e Suas Aplicações” da autora “Judith L. Gersting”
Codd queria utilizar a Matemática, mais específicamente, a teoria de conjuntos para criar um Sistema de Banco de Dados. A Matemática trataria de garantir a consistência dos dados armazenados.
| Operação | Símbolo | Descrição |
|---|---|---|
| União | ∪ | Elementos que pertencem a A ou B |
| Interseção | ∩ | Elementos comuns a A e B |
| Diferença | − | Elementos de A que não pertencem a B |
| Produto Cartesiano | × | Conjunto de todos os pares ordenados (a,b) |
Inicialmente a idéia era associar conjuntos de dados e garantir a consistência da informação. Assim nasceu o conceito de RELAÇÃO
Sejam dois conjuntos A e B.
O produto cartesiano é:
A × B = { (a,b) | a ∈ A e b ∈ B }
Uma relação R de A em B é qualquer subconjunto de A × B.
R ⊆ A × B
(lembrando que o simbolo “⊆” significa “está contido em” ou “é subconjunto de”)
Uma website vende camisetas básicas e camisetas esportivas nos tamanhos pequeno, médio e grande. Usando matemática, coloque as camisetas no conjunto A e os tamanhos no conjunto B. Utilize o produto cartesiano para gerar toda a grade de camisetas e tamanhos na página do website.
Camisetas X Tamanhos
No exemplo anterior, o conjunto C foi criado fazendo produto cartesiano de A x B. O conjunto C é uma Relação.
Contudo as operações da teoria dos conjuntos da matemática não eram suficientes para resolver algumas situações:
Considere uma cadastro de países denominado
conjunto A = {Brasil, Argentina, Chile } e um
cadastro de capitais chamado conjunto B =
{Brasilia, Buenos Aires, Santiago}.
Verifique se é possível criar um conjunto
C utilizando o produto cartesiano entre
A x B, ou seja, uma Relação. Nesta
relação C,
cada país deve estar associado a sua capital.
Capital X Países
Verificando a operação de produto cartesiano que
gerou o conjunto C produziu 9 pares
ordenados. Mas para nosso contexto (associar países e
suas capitais) dos 9 pares gerados, apenas
3 pares ordenados fazem sentido: C=
{(Brasil, Brasilia), (Argentina, Buenos
Aires), (Chile, Santiago)} ; os outros
6 pares não fazem sentido na associação de Países e
Capitais.
Portanto, para este contexto, apenas a operação de produto cartesiano não atendeu os requisitos para gerar um conjunto de dados consistente a partir de dois cadastros (dois conjuntos) fornecidos.
Uma função é uma relação especial entre dois conjuntos.
Sejam ( A ) e ( B ) conjuntos.
Uma função
\(f: A \to B\)
é um subconjunto do produto cartesiano
\(f \subseteq A \times B\)
em bom português: >> Uma função f(x) é uma regra que associa cada elemento de A a exatamente um elemento de B.
As funções f(x) agem como uma filtragem para selecionar do produto cartesiano apenas os pares de elementos que fazem sentido:
As funções podem ser vistas como setas mapeando cada ponto de um conjunto no outro.
No exemplo da loja de camisetas, temos cada elemento do “conjunto A” mapeando todos os elementos do “conjunto B”. É a representação gráfica do produto cartesiano e seus pares ordenados.
camisetas X Tamanhos
No exemplo dos países e suas capitais, temos um elemento do “conjunto A” mapeando um elemento do “conjunto B”. É um subconjunto do produto cartesiano de A X B, ou seja, uma filtragem aplicada ao produto cartesiano. Na terminologia das funções, é uma função bijetora.
Países X Capitais
Conclusão de Codd: apenas as operações convencionais da teoria de conjuntos não seria suficiente para projetar sistema de banco de dados. Seria necessária a adição de elementos teoria das funções aplicada a teoria das relações.
Professor Codd cria as operações de Algebra Relacional associada a Relações.
Nasce o conceito de Banco de Dados Relacional e os conceitos que irão criar a linguagem SQL (Structured Query Language).
Considere:
| Terminologia Relacional | Banco de Dados | Origem Matemática |
|---|---|---|
| RELAÇÃO | TABELA | CONJUNTO ou SUBCONJUNTO |
| ATRIBUTO | COLUNAS | Não aparece explicitamente |
| TUPLA | LINHA | ELEMENTO DO CONJUNTO OU PAR ORDENADO |
Baseadas na Álgebra Relacional de Codd.
| Operação | Símbolo | Descrição |
|---|---|---|
| Seleção | σ | Filtra linhas |
| Projeção | π | Seleciona colunas |
| União | ∪ | Combina relações compatíveis |
| Interseção | ∩ | Elementos comuns |
| Diferença | − | Subtração |
| Produto Cartesiano | × | Combinação total |
| Junção | ⋈ | Produto + Seleção |
| Divisão | ÷ | Consulta universal |
Todas as operações Relacionais são operações SQL e serão estudadas na aula 4 (Modelagem parte 2).
Seja R ⊆ A × A.
“Todo elemento é equivalente a si mesmo”
∀x ∈ A, (x,x) ∈ R
Em um cadastro de produtos, o produto Teclado tem a mesma categoria que o produto Teclado (ele mesmo). Consequentemente, em uma tabela do Banco de Dados, o valor da coluna “CategoriaID” de um registro é sempre igual ao “CategoriaID” dele mesmo.
“Se o primeiro equivale ao segundo, então o segundo equivale ao primeiro”
Se (x,y) ∈ R então (y,x) ∈ R
Se o Teclado (1) é equivalente ao Mouse (2) (ambos são da categoria Eletrônicos), então o Mouse (2) é equivalente ao Teclado (1). Consequentemente, no Banco de Dados, Teclado.CategoriaID = Mouse.CategoriaID.
Essa propriedade é utilizada para fazer “pareamento” entre tabelas.
“Se o primeiro equivale ao segundo, e o segundo equivale ao terceiro”, então primeiro equivale ao terceiro.”
Se (x,y) ∈ R e (y,z) ∈ R então (x,z) ∈ R
Se Teclado (1) é equivalente ao Mouse (2) e Mouse (2) é equivalente ao Monitor (3), então obrigatoriamente Teclado (1) é equivalente ao Monitor (3), pois todos são da categoria “Eletrônicos”.
Isso garante que todos os elementos de uma categoria formem um grupo fechado e coeso.
“Se o primeiro equivale ao segundo, então o segundo NÃO PODE equivaler ao primeiro”
Se (x,y) ∈ R e (y,x) ∈ R então x = y
Se o João é gerente da Maria, a Maria NÃO PODE ser gerente do João. Em uma tabela de funcionários, o Banco de dados garante HIERARQUIA na regra de negócio.
Uma relação é de equivalência se é:
Tenho uma tabela de produtos. Todos os produtos estão classificados em categorias. Prove nesta tabela que 2 produtos são equivalentes.
| ID (Elemento) | Nome do Produto | CategoriaID (Classe) |
| 1 | Teclado | 1 (Eletrônicos) |
| 2 | Mouse | 1 (Eletrônicos) |
| 3 | Monitor | 1 (Eletrônicos) |
| 4 | Camisa | 2 (Vestuário) |
| 5 | Calça | 2 (Vestuário) |
| 6 | Tênis | 2 (Vestuário) |
| 7 | Livro SQL | 3 (Livraria) |
| 8 | Livro Java | 3 (Livraria) |
| 9 | Livro Redes | 3 (Livraria) |
| 10 | Cadeira | 4 (Móveis) |
| 11 | Mesa | 4 (Móveis) |
| 12 | Sofá | 4 (Móveis) |
“Dois produtos são equivalentes se pertencerem à mesma categoria.”
“Dois produtos não são equivalentes se pertencerem a categorias diferentes.”
Para provar isso, é preciso testar as 3 propriedades de relações (Reflexiva, Simétrica e Transitiva) em relação ao ponto comum entre eles, que é no caso “categoria”.
Tomarei como exemplo “Cadeira, Mesa, Sofá”. Analisarei segundo a caracteristica comum “categoria”:
Considerando que cadeira, mesa e sofá atendem as propriedades “Reflexiva”, “Simétrica” e “Transitiva”, então “Cadeira, Mesa, Sofá” constituem a mesma classe de equivalencia.
Dada relação ~ em A:
A classe de equivalência de x é:
[x] = { y ∈ A | y ~ x }
Exemplo em uma relação de Banco de Dados formada pelo
conjunto A Produtos e pelo
conjunto B Categorias:
R ⊆ A × B :
Produtos X Categorias
Chamamos de Classes de Equivalência todas as relações de equivalência que se formam dentro da Relação.
São as “panelinhas” que se formam dentro do conjunto.
No nosso exemplo temas as seguintes Classes de Equivalência:
| Classe | Categoria | Pares Ordenados |
|---|---|---|
| 1 | Eletrônicos | 1. (Teclado, Eletrônicos) 2. (Mouse, Eletrônicos) 3. (Monitor, Eletrônicos) |
| 2 | Vestuário | 1. (Camisa, Vestuário) 2. (Calça, Vestuário) 3. (Tênis, Vestuário) |
| 3 | Livraria | 1. (Livro SQL, Livraria) 2. (Livro Java, Livraria) 3. (Livro Redes, Livraria) |
| 4 | Móveis | 1. (Cadeira, Móveis) 2. (Mesa, Móveis) 3. (Sofá, Móveis) |
Observações importantes:
1-As classes são disjuntas; 2-A união das quatro classes é exatamente a relação $ R $; 3-Cada par ordenado pertence a uma única classe;
São os atributos de uma relação (colunas de uma tabela) cujos valores determinam os valores de outras colunas.
Exemplo: Imagine a Relação (Tabela) chamada CursoProgramacao.
| ID_Aluno | Nome_Aluno | Cod_Curso | Nome_Curso | ID_Instrutor | Nota_Final |
|---|---|---|---|---|---|
| 10 | Alan Turing | SQL-01 | Banco de Dados | 500 | 9.5 |
| 20 | Ada Lovelace | PY-02 | Python Avançado | 600 | 10.0 |
| 10 | Alan Turing | PY-02 | Python Avançado | 600 | 8.0 |
| 30 | Grace Hopper | SQL-01 | Banco de Dados | 500 | 9.0 |
| 40 | Linus Torvalds | JS-03 | JavaScript | 700 | 7.5 |
Considere as seguintes Regras de Negócio
Cada aluno tem apenas um nome oficial.
Cada código de curso pertence a apenas um nome de curso.
Cada curso é ministrado por apenas um instrutor específico (um instrutor não muda de curso).
Um aluno pode fazer vários cursos, e terá uma nota diferente para cada um.
Tendo estas informações identifique as DEPENDÊNCIAS FUNCIONAIS dos atributos da tabela.
Quais são os atributos da tabela?
| ID_Aluno | Nome_Aluno | Cod_Curso | Nome_Curso | ID_Instrutor | Nota_Final |
|---|---|---|---|---|---|
| Atributo1 | Dependência Funcional | Atributo2 | Resultado |
|---|---|---|---|
| ID_Aluno | determina | Nome_Aluno | ? |
| Cod_Curso | determina | Nome_Curso | ? |
| Cod_Curso | determina | ID_Instrutor | ? |
| ID_Aluno | determina | Nota_Final | ? |
| Atributo1 | Dependência Funcional | Atributo2 | Resultado | Comentário |
|---|---|---|---|---|
| ID_Aluno | determina | Nome_Aluno | SIM | ID_Aluno valendo “10” determina Nome_Aluno “Alan Turing” |
| Cod_Curso | determina | Nome_Curso | SIM | Cod_Curso valendo “SQL-01” determina Nome_Curso “Banco de Dados” |
| Cod_Curso | determina | ID_Instrutor | SIM | Pela regra de negócio #3, Cod_Curso determina ID_Instrutor. Aqui temos um caso especial de Dependência Parcial |
| ID_Aluno | determina | Nota_Final | NÃO | Olhe o Alan Turing (ID 10). Ele tem nota 9.5 e nota 8.0. ID_Aluno sozinho não determina a nota do aluno. |
Eu preciso saber QUEM (Aluno) e em QUAL MATÉRIA (Curso) para te dar a nota exata. A combinação dos atributos {ID_Aluno, Cod_Curso} determinam Nota_Final! Esta é um caso de Dependência Total.
Dado conjunto de atributos X e conjunto de dependências funcionais F:
O fecho de X (X⁺) é o conjunto de todos os atributos funcionalmente determinados por X.
Exemplo:
Dependências:
A → B
B → C
Então:
A⁺ = {A, B, C}
Processo de organização de relações para:
Forma mais forte que 3FN:
Para toda dependência:
X → Y
X deve ser superchave.
Dependências funcionais induzem partições do conjunto de tuplas.
Quando:
A → B
Significa que valores iguais de A geram classes de equivalência nas tuplas.
| Conceito Matemático | Aplicação em BD |
|---|---|
| Relação | Tabela |
| Produto cartesiano | Combinação de domínios |
| Relação de equivalência | Particionamento por chave |
| Fecho | Descoberta de dependências |
| Transitiva | Análise de dependências |
| Antissimétrica | Ordem parcial |
| Álgebra relacional | SQL |
GERSTING, Judith L. Fundamentos matemáticos para a ciência da computação: matemática discreta e suas aplicações. 7. ed. Rio de Janeiro: LTC, 2017. Tradução e revisão técnica de Valéria de Magalhães Iório. 884 p. ISBN 978-85-216-3259-7